/*
 * Copyright (C) 2009 Kristopher T Babic
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of
 * the GNU General Public License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program;
 * if not, see <http://www.gnu.org/licenses>.
 */

package edu.idp.client.advrubberband;

import java.awt.*;
import java.awt.event.MouseEvent;

/**
 * An extension of Panel which is fitted with a Rubberband.
 * Handling of mouse events is automatically handled for
 * rubberbanding.<p>
 *
 * @author Kristopher T Babic
 */
abstract public class RubberbandPanel extends Panel {
    private Rubberband rubberband;

    abstract public void rubberbandEnded(Rubberband rb);

    public void setRubberband(Rubberband rb) {
        if (rubberband != null) {
            rubberband.setActive(false);
        }
        rubberband = rb;

        if (rubberband != null) {
            rubberband.setActive(true);
            rubberband.setComponent(this);
        }
    }

    public Rubberband getRubberband() {
        return rubberband;
    }

    public void processMouseEvent(MouseEvent event) {
        super.processMouseEvent(event);  // fire to listeners

        if (rubberband != null &&
                event.getID() == MouseEvent.MOUSE_RELEASED)
            rubberbandEnded(rubberband);
    }
}
